// 作为学生的路由文件
var express = require("express");
var router = express.Router();
const jwt = require("jsonwebtoken");

const mongoose = require("mongoose");
// 3. 创建骨架， 定义文档的数据类型
// 主要是用于新增的时候, 只有在骨架里面的字段才可以添加进数据库
const studentsSchema = mongoose.Schema({
  name: String,
  age: Number,
  sex: Number,
  address: String,
  phone: String,
});

// 4. 创建模型, 模型其实是构造函数，尤其是新增的时候，需要创建出实例然后再去新增，查询或者删除，直接通过模型操作
// 第一个参数是集合名称,(复数)
const Students = mongoose.model("students", studentsSchema);

let secret = "I_LOVE_JING";

router.get("/list", function (req, res, next) {
  // 后端需要拿到前端传过来的值
  // console.log(req.query);
  try {
    const { name, pageSize, currentPage, token } = req.query;

    let payload = jwt.verify(token, secret);
    console.log(payload);

    if (!pageSize || !currentPage) {
      res.json({
        status: 1,
        msg: "参数错误",
      });
    }

    let searchObj = {};
    if (name) {
      searchObj.name = name;
    }
    // 通过模型去查找内容，第一个参数是查找条件，第二个参数是回调函数
    // Students.find(searchObj, (err, doc) => {
    //   if (err) throw err;
    //   res.json({
    //     status: 0,
    //     result: doc,
    //   });
    // });

    // count用来获取总条数
    Students.count(searchObj, (err, count) => {
      if (err) throw err;
      Students.find(searchObj)
        .skip((+currentPage - 1) * +pageSize)
        .limit(+pageSize)
        .exec((err, doc) => {
          if (err) throw err;
          res.json({
            status: 0,
            result: doc,
            count,
          });
        });
    });
  } catch (err) {
    res.json({
      status: 999,
      msg: "token错误",
    });
  }
});

// 删除接口
router.post("/del", (req, res, next) => {
  // get请求，使用req.query进行参数接受
  // post请求，使用req.body进行参数接受
  console.log(req.body);
  const { id } = req.body;
  if (!id) {
    res.json({
      status: 1,
      msg: "参数错误",
    });
  }

  Students.deleteOne(
    {
      _id: id,
    },
    (err) => {
      if (err) throw err;
      res.json({
        status: 0,
        msg: "删除成功",
      });
    }
  );

  // res.json({
  //   status: 0,
  //   msg: "删除成功",
  // });
});

// 新增的接口
router.post("/add", (req, res, next) => {
  const { name, age, sex, address, phone } = req.body;

  if (!name || !age || !sex || !address || !phone) {
    res.json({
      status: 1,
      msg: "参数错误",
    });
  }

  // 要将接受到的信息存到数据库
  // 新增的时候，需要先通过模型去创建一个实例
  const student = new Students({
    name: name,
    age: +age,
    sex: +sex,
    address,
    phone,
  });
  // 往数据库存实例
  student.save((err) => {
    if (err) throw err;
    res.json({
      status: 0,
      msg: "新增成功",
    });
  });
});

// 获取单个学生的接口
router.post("/get", (req, res, next) => {
  const { id } = req.body;
  // find方法找到的doc是一个数组类型，如果没有满足的，返回的是空数组
  // findOne方法找到的doc是一个对象类型, 如果找不到，返回的是null
  Students.findOne({ _id: id }, (err, doc) => {
    if (err) throw err;
    if (doc) {
      res.json({
        status: 0,
        result: doc,
      });
    } else {
      res.json({
        status: 2,
        msg: "该学生不存在",
      });
    }
  });
});

// 编辑接口
router.post("/edit", (req, res, next) => {
  // 编辑的时候要多传一个id
  // Students.updateOne()
});

module.exports = router;
